import pandas as pd  # 导入 pandas 库用于数据处理
import plotly.express as px  # 导入 plotly.express 库用于绘制图表

# 读取Excel文件
file_path = 'jobs.xlsx'  # 指定Excel文件路径
df = pd.read_excel(file_path)  # 使用 pandas 读取Excel文件到 DataFrame

# 提取城市信息并统计出现次数
city_counts = df['cityName'].value_counts().reset_index()  # 统计 'cityName' 列中各城市的出现次数，并重置索引
city_counts.columns = ['city', 'count']  # 将新的 DataFrame 列名设置为 'city' 和 'count'

# 按岗位数量降序排序
city_counts_sorted = city_counts.sort_values(by='count', ascending=False)  # 按 'count' 列降序排序

# 绘制交互式条形图
fig = px.bar(  # 使用 plotly.express 的 bar 函数绘制条形图
    city_counts_sorted,  # 使用排序后的数据
    y='city',  # Y轴为城市名称
    x='count',  # X轴为岗位数量
    title='Python工程师城市分布',  # 图表标题
    text='count',  # 在条形上显示具体数值
    color='count',  # 根据数量设置颜色
    color_continuous_scale='Viridis',  # 使用 Viridis 颜色尺度
)

# 调整图表布局
fig.update_layout(  # 更新图表布局
    xaxis_title='岗位数量',  # X轴标题
    yaxis_title='城市',  # Y轴标题
    height=800,  # 增加图表高度，避免城市标签拥挤
    margin=dict(l=150, r=50, t=80, b=50),  # 调整边距，确保城市名称显示完整
    yaxis={'categoryorder': 'array', 'categoryarray': city_counts_sorted['city'].tolist()[::-1]}  # 显式指定 Y 轴顺序为按 'count' 降序排列
)

# 显示并保存图表
fig.write_image('city_distribution_interactive.png')  # 将图表保存为图片文件
fig.show()  # 在浏览器或 IDE 中显示交互式图表